package com.example.demo.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.BeautyCare;
import com.example.demo.entity.DTO.WorkersAndBookedTimeDTO;
import com.example.demo.entity.Workers;
import com.example.demo.entity.WorkersAndBookedTime;
import com.example.demo.mapper.BeautyCareMapper;
import com.example.demo.mapper.WorkersAndBookedTimeMapper;
import com.example.demo.mapper.WorkersMapper;
import com.example.demo.service.IWorkersAndBookedTimeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 员工预约表 服务实现类
 * </p>
 *
 * @author Mr.Xiayh
 * @since 2024-05-31
 */
@Slf4j
@Service
public class WorkersAndBookedTimeServiceImpl extends ServiceImpl<WorkersAndBookedTimeMapper, WorkersAndBookedTime> implements IWorkersAndBookedTimeService {
    @Resource
    private WorkersAndBookedTimeMapper workersAndBookedTimeMapper;
    @Override
    public List<WorkersAndBookedTime> workersAndBookedTimeList() {
        return null;
    }
    @Autowired
    private WorkersMapper workersMapper;
    @Autowired
    private BeautyCareMapper beautyCareMapper;

    @Override
    public List<WorkersAndBookedTimeDTO> getByCriteria(WorkersAndBookedTime workersAndBookedTime) {
        return getAllWorkersAndBeautyCare(workersAndBookedTimeMapper.selectByCriteria(workersAndBookedTime));
    }

    /**
     * 根据工作者ID检查该工作者是否已被预约。
     *
     * 此方法通过调用workersAndBookedTimeMapper的bookedWorker方法来查询指定工作者的预约状态。
     * 如果返回值为1，表示该工作者已被预约，方法返回true；否则，返回false。
     *
     * @param wbt_id 工作者的ID，用于查询预约状态。
     * @return boolean 如果工作者已被预约，则返回true；否则返回false。
     */
    @Override
    public boolean bookedWorker(int wbt_id) {
        // 调用workersAndBookedTimeMapper的bookedWorker方法查询指定工作者是否已被预约
        if(workersAndBookedTimeMapper.bookedWorker(wbt_id)==1){
            return true;
        }
        return false;
    }


    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean cancelBooked(int wbt_id) {
        if(workersAndBookedTimeMapper.cancelBooked(wbt_id)==1){
            return true;
        }
        return false;
    }

    @Override
    public WorkersAndBookedTime findBookedTime(int wbtId) {
        return workersAndBookedTimeMapper.selectByWbtId(wbtId);
    }


    private List<WorkersAndBookedTimeDTO> getAllWorkersAndBeautyCare(List<WorkersAndBookedTime> allBooked){
        List<WorkersAndBookedTimeDTO> workersAndBookedTimeDTOS = new ArrayList<>();
        for (WorkersAndBookedTime workersAndBookedTime : allBooked) {
            // 创建一个WorkersAndBookedTimeDTO实例，用于存储工人和预订时间的信息
            WorkersAndBookedTimeDTO workersAndBookedTimeDTO = new WorkersAndBookedTimeDTO();

            // 将workersAndBookedTime对象的属性值复制到workersAndBookedTimeDTO对象中
            BeanUtil.copyProperties(workersAndBookedTime, workersAndBookedTimeDTO);

            // 根据workersId查询工人信息，并设置到workersAndBookedTimeDTO对象中
            Workers workers = workersMapper.selectByWorkersId(workersAndBookedTime.getWorkersId());
            workersAndBookedTimeDTO.setWorkers(workers);

            // 根据bcId查询美容护理信息，并设置到workersAndBookedTimeDTO对象中
            BeautyCare beautyCare = beautyCareMapper.selectBeautyCareByBcId(workersAndBookedTime.getBcId());
            workersAndBookedTimeDTO.setBeautyCare(beautyCare);

            // 将填充完毕的workersAndBookedTimeDTO对象添加到集合中
            workersAndBookedTimeDTOS.add(workersAndBookedTimeDTO);
        }
        return workersAndBookedTimeDTOS;
    }


}
